﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Obra.SmugMug.Api
{
    public abstract class AlbumContractBase : ResponseWithIdContract
    {
        [XmlElement("Community")]
        public CommunityContract Community
        {
            get;
            set;
        }

        [XmlElement("Template")]
        public TemplateContract Template
        {
            get;
            set;
        }

        [XmlElement("Watermark")]
        public WatermarkContract Watermark
        {
            get;
            set;
        }

        [XmlAttribute("Backprinting")]
        public string Backprinting
        {
            get;
            set;
        }

        [XmlAttribute("CanRank")]
        public bool CanRank
        {
            get;
            set;
        }

        [XmlAttribute("Clean")]
        public bool Clean
        {
            get;
            set;
        }

        [XmlAttribute("ColorCorrection")]
        public int ColorCorrection
        {
            get;
            set;
        }

        [XmlAttribute("Comments")]
        public bool Comments
        {
            get;
            set;
        }

        [XmlAttribute("DefaultColor")]
        public bool DefaultColor
        {
            get;
            set;
        }

        [XmlAttribute("EXIF")]
        public bool Exif
        {
            get;
            set;
        }

        [XmlAttribute("External")]
        public bool External
        {
            get;
            set;
        }

        [XmlAttribute("FamilyEdit")]
        public bool FamilyEdit
        {
            get;
            set;
        }

        [XmlAttribute("Filenames")]
        public bool FileNames
        {
            get;
            set;
        }

        [XmlAttribute("FriendEdit")]
        public bool FriendEdit
        {
            get;
            set;
        }

        [XmlAttribute("Geography")]
        public bool Geography
        {
            get;
            set;
        }

        [XmlAttribute("Header")]
        public bool Header
        {
            get;
            set;
        }

        [XmlAttribute("HideOwner")]
        public bool HideOwner
        {
            get;
            set;
        }

        [XmlAttribute("Larges")]
        public bool Larges
        {
            get;
            set;
        }

        [XmlAttribute("Originals")]
        public bool Originals
        {
            get;
            set;
        }

        [XmlAttribute("Password")]
        public string Password
        {
            get;
            set;
        }

        [XmlAttribute("PasswordHint")]
        public string PasswordHint
        {
            get;
            set;
        }

        [XmlAttribute("Printable")]
        public bool Printable
        {
            get;
            set;
        }

        [XmlAttribute("ProofDays")]
        public int ProofDays
        {
            get;
            set;
        }

        [XmlAttribute("Protected")]
        public bool Protected
        {
            get;
            set;
        }

        [XmlAttribute("Public")]
        public bool Public
        {
            get;
            set;
        }

        [XmlAttribute("Share")]
        public bool Share
        {
            get;
            set;
        }

        [XmlAttribute("SmugSearchable")]
        public bool SmugSearchable
        {
            get;
            set;
        }

        [XmlAttribute("SortDirection")]
        public bool SortDirectionSerializedXml
        {
            get;
            set;
        }

        public SortDirection SortDirection
        {
            get { return (this.SortDirectionSerializedXml) ? SortDirection.Descending : SortDirection.Ascending; }
        }

        [XmlAttribute("SortMethod")]
        public SortMethod SortMethod
        {
            get;
            set;
        }

        [XmlAttribute("UnsharpAmount")]
        public float UnsharpAmount
        {
            get;
            set;
        }


        [XmlAttribute("UnsharpRadius")]
        public float UnsharpRadius
        {
            get;
            set;
        }

        [XmlAttribute("UnsharpSigma")]
        public float UnsharpSigma
        {
            get;
            set;
        }

        [XmlAttribute("UnsharpThreshold")]
        public float UnsharpThreshold
        {
            get;
            set;
        }

        [XmlAttribute("Watermarking")]
        public bool Watermarking
        {
            get;
            set;
        }

        [XmlAttribute("WorldSearchable")]
        public bool WorldSearchable
        {
            get;
            set;
        }

        [XmlAttribute("XLarges")]
        public bool XLarges
        {
            get;
            set;
        }

        [XmlAttribute("X2Larges")]
        public bool X2Larges
        {
            get;
            set;
        }

        [XmlAttribute("X3Larges")]
        public bool X3Larges
        {
            get;
            set;
        }

        [XmlElement("Highlight")]
        public HighlightContract Highlight
        {
            get;
            set;
        }
    }
}
